<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 编程范式：命令式编程/声明式编程
        // 编程范式：面向对象编程（第一公民：对象）/函数式编程（第一公民：函数）
        // 高阶函数：filter/map/reduce
        const num = [10, 20, 111, 222, 444, 333, 40, 50, 30];
        // console.log(num);

        // 1. filter函数的使用
        // filter 中的回调函数有一个要求：必须返回一个boolean值
        // true：当返回true时，函数内部会自动将这次回调的n加入到新的数组中去
        // false：当返回false时，函数内部会自动过滤这次的n
        let newNum = num.filter(function (n) {
            return n < 100;
        })
        console.log(newNum);

        // 2. map函数的使用
        let new2Num = newNum.map(function (n) {
            return n * 2;
        })
        console.log(new2Num);

        // 3. reduce函数的使用
        // reduce作用对数组中所有的内容汇总
        // let total = new2Num.reduce(function (上一次返回的值, n) { }, 初始值)
        let total = new2Num.reduce(function (preValue, n) {
            return preValue + n;
        }, 0)






        // 1. 需求：取出所有小于100的数字
        // let newNum = [];
        // for (let n of num) {
        //     if (n < 100) {
        //         newNum.push(n);
        //     }
        // }
        // console.log(newNum);

        // 2. 需求：将所有小于100的数字进行转化：全部 *2
        // let new2Num = [];
        // for (let n of newNum) {
        //     new2Num.push(n * 2);
        // }
        // console.log(new2Num);

        // 3. 需求：将所有new2Num数字相加，得到最终的结果
        // let total = 0;
        // for (let n of new2Num) {
        //     total = total + n;
        // }
        // console.log(total);
    </script>
</body>

</html>